PERSISTENCE
===

Si tratta di un framework per gestire la persistenza in database di tipo "legacy" usando solo jdbc.
Come librerie esterne usa:
01. log4j
02. commons-dbutils
Per il resto usa jdk 1.8.

DA NOTARE
=========

Tutte le funzionalità sono costruite con questa logica:
01. interfaccia che definisce tutti i metodi, inclusi semplici "getter and setter"
02. classe astratta che implementa interfaccia, definisce le proprietà, implementa tutti i metodi senza parametri di tipo Generic nella firma
03. classe concreta che estende la classe astratta e implementa i metodi con parametri di tipo Generic nella firma
In questo modo si hanno al massimo 3 livelli di "profondità" nella gerarchia delle classi.
Secondo me questa "regola di strutturazione" è necessaria affinchè il framework resti manuntenibile e estendibile

Sono previste queste tipologie di tabelle
01. TableGeneric = tabella semplice
02. TableGenericExpirable = tabella semplice + colonne di validità
03. TableAuditable = tabella semplice + colonne per auditing
04. TableAuditableExpirable = tabella semplice + colonne per auditing + colonne per validità

Il framework crea le seguenti tabelle:
- catalogs (TableGeneric)
- countries (TableAuditableExpirable)
- languages (TableAuditable)
- locales (TableGenericExpirable)
Servono solo come esempio di implementazione delle tipologie di tabelle fornite

Sono supportate queste tipologie di "primary keys":
01. colonna singola
02. multi colonna
Per la colonna singola sono previsti queste tipologie di valore:
- FIRST_AVAILABLE -> per non avere "buchi" nella numerazione
- NEXT_AVAILABLE -> il prossimo numero
- NEXT_IN_SEQUENCE -> il prossimo numero preso da una sequenza
- NONE -> nessun valore; la "primary key" va assegnata manualmente

Le classi concrete
- JdbcConnection
- JdbcDriver
- PropertiesReader
- Persistence
sono un esempio di come intendo che vada usato questo framework.
Vengono usate dagli Unit Tests.

Per usare questo framework basterà:
- creare i proprie model e i relativi dao prendendo come esempio quelli forniti
  Fare attenzione che i model vanno personalizzati in base alla database engine scelta
- estendere la classe Persistence
- nella nuova classe fare la Override dei metodi setupDaos, setupSequences ereditati
  da PersistenceLayer;
  lo scopo è sostituire l'uso dei modelli e i dao di esempio con i propri
- istanziare la nuova classe
- invocare il metodo startLayer()